package org.huangrui.spark.java.sql;

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SaveMode;
import org.apache.spark.sql.SparkSession;

/**
 * @Author hr
 * @Create 2024-10-20 19:11
 */
public class SparkSQL05_Source_JSON {
    public static void main(String[] args) {
        SparkSession spark = SparkSession.builder().appName("SparkSQL05_Source_JSON").master("local[*]").getOrCreate();

        // 不是对应的JSON文件，会报错
        // org.apache.spark.sql.AnalysisException:
        //            Since Spark 2.3, the queries from raw JSON/CSV files are disallowed when the
        //            referenced columns only include the internal corrupt record column
        //                    (named _corrupt_record by default)

        // JSON : JavaScript Object Notation
        //        对象 ：{}
        //        数组 ：[]
        //        JSON文件：整个文件的数据格式符合JSON格式，不是一行数据符合JSON格式
        // TODO SparkSQL其实就是对Spark Core RDD的封装。RDD读取文件采用的是Hadoop，hadoop是按行读取。
        //      SparkSQL只需要保证JSON文件中一行数据符合JSON格式即可，无需整个文件符合JSON格式
        final Dataset<Row> json = spark.read().json("data/user.json");

        json.write().mode(SaveMode.Overwrite).json("output");
        json.write().mode(SaveMode.Append).csv("output");
        json.show();


        spark.stop();
    }
}
